/* 约数个数
* 1.N的约数个数(1~N中能整除N的个数 N%x == 0)
    N = p1^c1 * p2^c2 * p3^c3 * p4^c4... pk^ck
    f(N) = (c1+1) * (c2+2) * (c3+3) ... * (ck+k)

    1~N中 累加(1~N)f(i) O(NlogN)

    0 <= N <= 2e9 约数个数max <= 5e4

    for(int i = 1; i < N; i++){
        if(cnt[i] == 0) continue; //优化
        for(int j = i; j < N; j+=i)  //只考虑倍数 
            ans[j] += cnt[i];
    }

* 本题: 等式化简
        -> y = (x*n!) / (x - n!)
        -> x有多少个取值，使的y是整数
        -> y = (x*n!)/(x-n!) 
             = (x-n!+n!)*n!/(x-n!) 
             = (x-n!)*n!/(x-n!) + n!^2/(x-n!) 
             = n!+n!^2/(x-n!)
        -> n!^2的约数个数

    n! = p1^c1 * p2^c2 * p3^c3 * p4^c4... pk^ck
    n!^2 = p1^2c1 * p2^2c2 * p3^2c3 * p4^2c4... pk^2ck

    f(N) = (2c1+1) * (2c2+2) * (2c3+3) ... * (2ck+k)        
*/

#define DEBUG
#pragma GCC optimize("O1,O2,O3,Ofast")
#pragma GCC optimize("no-stack-protector,unroll-loops,fast-math,inline")
#pragma GCC target("avx,avx2,fma")
#pragma GCC target("sse,sse2,sse3,sse4,sse4.1,sse4.2,ssse3")

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1e6+10, MOD = 1e9+7;
int n;
int primes[N], cnt;
bool st[N];

void init(int n)
{
    for(int i = 2; i <= n; i++)
    {
        if(!st[i]) primes[cnt++] = i;
        for(int j = 0; primes[j] * i <= n; j++)
        {    
            st[i*primes[j]] = true;
            if(i%primes[j] == 0) break;
        }
    }
}

int main()
{
    #ifdef DEBUG
        freopen("./in.txt", "r", stdin);
    #else
        ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    #endif

    
    int n; cin >> n;
    init(n);
    int res = 1;
    for(int i = 0; i < cnt; i++) //枚举每一个质数
    {
        int p = primes[i];
        int s = 0;
        for(int j = n; j; j /= p) s += j / p;

        res = 1ll * res * (2*s+1) % MOD;
    }

    cout << res << endl; 
    return 0;
}